import java.util.*;

/*
给定一个字符串 S，以及一个模式串 P，所有字符串中只包含大小写英文字母以及阿拉伯数字。
模式串 P在字符串 S中多次作为子串出现。
求出模式串 P在字符串 S中所有出现的位置的起始下标。

输入格式
第一行输入整数 N，表示字符串 P 的长度。
第二行输入字符串 P。
第三行输入整数 M，表示字符串 S的长度。
第四行输入字符串 S。

输出格式
共一行，输出所有出现位置的起始下标（下标从 0开始计数），整数之间用空格隔开。

数据范围
1≤N≤1e5
1≤M≤1e6

输入样例：
3
aba
5
ababa

输出样例：
0 2

 */
public class Main {
    static int n;//模式串P的长度
    static int m;//字符串S的长度
    static int[] next = new int[10010];
    static char[] p, s;

    static void getNext() {
        for (int i = 2, j = 0; i <= n; i++) {
            while (j > 0 && p[i] != p[j + 1]) j = next[j];
            if (p[i] == p[j + 1]) j++;
            next[i] = j;
        }
    }

    static void kmp() {
        for (int i = 1, j = 0; i <= m; i++) {
            while (j > 0 && s[i] != p[j + 1]) j = next[j];
            if (s[i] == p[j + 1]) j++;
            if (j == n) {
                System.out.print(i - n + " ");
                j = next[j];
            }
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        String pattern = sc.next();
        pattern = " " + pattern;
        p = pattern.toCharArray();

        m = sc.nextInt();
        String str = sc.next();
        str = " " + str;
        s = str.toCharArray();

        getNext();
        kmp();

    }
}